package com.scienzeinternazionali.util;

import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import com.scienzeinternazionali.dto.Associazione;
import com.scienzeinternazionali.dto.Docente;
import com.scienzeinternazionali.dto.ErrorMessage;
import com.scienzeinternazionali.dto.Insegnamento;
import com.scienzeinternazionali.dto.MaterialeDidattico;
import com.scienzeinternazionali.dto.Post;
import com.scienzeinternazionali.dto.Pubblicazione;
import com.scienzeinternazionali.dto.RisorsaWeb;
import com.scienzeinternazionali.dto.Utente;

public class SessionData {
	private static final String GENERICOBJECT = "oggettoGenerico";
	private static final String COUNTRY = "country";
	private static final String PAGE = "page";
	private static final String SUBPAGE = "subPage";
	private static final String DESC_PAGE = "descPage";
	private static final String DESC_SUBPAGE = "descSubPage";
	private static final String ERRORE = "errore";
	private static final String UTENTE = "utente";
	private static final String DOCENTI = "elencoDocenti";
	private static final String DOCENTE = "docente";
	private static final String DOCENTI_MOSCA = "elencoDocentiMosca";
	private static final String INSEGNAMENTI = "elencoInsegnamenti";
	private static final String PUBBLICAZIONI = "elencoPubblicazioni";
	private static final String RISORSE_WEB = "elencoRisorseWeb";
	private static final String MATERIALE_DIDATTICO = "elencoMaterialeDidattico";
	private static final String COORTE = "coorte";
	private static final String PS = "ps";
	private static final String POST_BOZZA = "elencoPostBozza";
	private static final String POST_PUBBLICATI = "elencoPostPubblicati";
	private static final String POST_TOP_PUBBLICATI = "elencoPostTopPubblicati";
	private static final String POST_PUBBLICATI_EVIDENZA = "elencoPostPubblicatiEvidenza";
	private static final String POST_MOD = "postDaModificare";
	private static final String POST_DEL = "postDaEliminare";
	private HttpSession session = null;
//    private static Logger logger = LogFactory.getLogger(LogFactory.SCIENZEINTERNAZIONALI);

    
	public static SessionData buildFromRequest(HttpServletRequest request) {
		return new SessionData(request);
	}

	public static SessionData buildFromSession(HttpSession session) {
		return new SessionData(session);
	}

	private SessionData(HttpServletRequest request) {

		this.session = request.getSession();
	}
	public HttpSession getSession(){
		return session;
	}

	private SessionData(HttpSession session) {
		this.session = session;
	}

	public ServletContext getServletContext() {
		return this.session.getServletContext();
	}

	public void invalidateSession(HttpServletRequest request) {
		this.session.invalidate();
		this.session = request.getSession();
	}

	
	  public boolean isSessioneScaduta() {
			return session.isNew();
		  }
	

		public void setOggettoGenerico(Object oggettoGenerico) {
			session.setAttribute(SessionData.GENERICOBJECT, oggettoGenerico);
		}
		public Object getOggettoGenerico() {
			return session.getAttribute(SessionData.GENERICOBJECT);
		}
		public void setCountry(String country) {
			session.setAttribute(SessionData.COUNTRY, country);
		}
		public Object getCountry() {
			return session.getAttribute(SessionData.COUNTRY);
		}
		public Object getPage() {
			return session.getAttribute(SessionData.PAGE);
		}
		public void setPage(String page) {
			session.setAttribute(SessionData.PAGE, page);
		}
		public Object getSubPage() {
			return session.getAttribute(SessionData.SUBPAGE);
		}
		public void setSubPage(String subpage) {
			session.setAttribute(SessionData.SUBPAGE, subpage);
		}
		public Object getDescSubPage() {
			return session.getAttribute(SessionData.DESC_SUBPAGE);
		}
		public void setDescSubPage(String descsubpage) {
			session.setAttribute(SessionData.DESC_SUBPAGE, descsubpage);
		}
		public Object getDescPage() {
			return session.getAttribute(SessionData.DESC_PAGE);
		}
		public void setDescPage(String descpage) {
			session.setAttribute(SessionData.DESC_PAGE, descpage);
		}
		
		public void removeError(){
			session.removeAttribute(SessionData.ERRORE);
		}
		public void setErrore(ErrorMessage errore) {
			session.setAttribute(SessionData.ERRORE, errore);
		}
		public Object getErrore() {
			return session.getAttribute(SessionData.ERRORE);
		}
		public void setUtente(Utente utente) {
			session.setAttribute(SessionData.UTENTE, utente);
		}
		public Object getUtente() {
			return session.getAttribute(SessionData.UTENTE);
		}
		public void setCoorte(List<Associazione> coorte) {
			session.setAttribute(SessionData.COORTE, coorte);
		}
		public Object getCoorte() {
			return session.getAttribute(SessionData.COORTE);
		}
		public void setPubblicazioni(List<Pubblicazione> pubblicazioni) {
			session.setAttribute(SessionData.PUBBLICAZIONI, pubblicazioni);
		}
		public Object getPubblicazioni() {
			return session.getAttribute(SessionData.PUBBLICAZIONI);
		}
		public void setRisorseWeb(List<RisorsaWeb> rw) {
			session.setAttribute(SessionData.RISORSE_WEB, rw);
		}
		public Object getRisorseWeb() {
			return session.getAttribute(SessionData.RISORSE_WEB);
		}
		public void setMaterialeDidattico(List<MaterialeDidattico> md) {
			session.setAttribute(SessionData.MATERIALE_DIDATTICO, md);
		}
		public Object getMaterialeDidattico() {
			return session.getAttribute(SessionData.MATERIALE_DIDATTICO);
		}
		public void setPianoDiStudi(String ps) {
			session.setAttribute(SessionData.PS, ps);
		}
		public Object getPianoDiStudi() {
			return session.getAttribute(SessionData.PS);
		}
		public void setDocente(Docente docente) {
			session.setAttribute(SessionData.DOCENTE, docente);
		}
		public Object getDocente() {
			return session.getAttribute(SessionData.DOCENTE);
		}
		public void setElencoDocenti(List<Docente> elencoDocenti) {
			session.setAttribute(SessionData.DOCENTI, elencoDocenti);
		}
		public Object getElencoDocenti() {
			return session.getAttribute(SessionData.DOCENTI);
		}
		public void setElencoDocentiMosca(List<Docente> elencoDocentiMosca) {
			session.setAttribute(SessionData.DOCENTI_MOSCA, elencoDocentiMosca);
		}
		public Object getElencoDocentiMosca() {
			return session.getAttribute(SessionData.DOCENTI_MOSCA);
		}
		public void setElencoInsegnamenti(List<Insegnamento> elencoInsegnamenti) {
			session.setAttribute(SessionData.INSEGNAMENTI, elencoInsegnamenti);
		}
		public Object getElencoInsegnamenti() {
			return session.getAttribute(SessionData.INSEGNAMENTI);
		}
		public void setElencoPostBozza(List<Post> elencoBozza) {
			session.setAttribute(SessionData.POST_BOZZA, elencoBozza);
		}
		public Object getElencoPostBozza() {
			return session.getAttribute(SessionData.POST_BOZZA);
		}
		public void setElencoPostPubblicati(List<Post> elencoPubblicati) {
			session.setAttribute(SessionData.POST_PUBBLICATI, elencoPubblicati);
		}
		public Object getElencoPostPubblicati() {
			return session.getAttribute(SessionData.POST_PUBBLICATI);
		}
		public void setElencoPostTopPubblicati(List<Post> elencoTopPubblicati) {
			session.setAttribute(SessionData.POST_TOP_PUBBLICATI, elencoTopPubblicati);
		}
		public Object getElencoPostTopPubblicati() {
			return session.getAttribute(SessionData.POST_TOP_PUBBLICATI);
		}
		public void setElencoPostPubblicatiEvidenza(List<Post> elencoPubblicatiEvidenza) {
			session.setAttribute(SessionData.POST_PUBBLICATI_EVIDENZA, elencoPubblicatiEvidenza);
		}
		public Object getElencoPostPubblicatiEvidenza() {
			return session.getAttribute(SessionData.POST_PUBBLICATI_EVIDENZA);
		}
		public void removeElencoPostPubblicati(){
			session.removeAttribute(SessionData.POST_PUBBLICATI);
		}
		public void removeElencoPostBozza(){
			session.removeAttribute(SessionData.POST_BOZZA);
		}
		
		public void setPostDaModificare(Post post) {
			session.setAttribute(SessionData.POST_MOD, post);
		}
		public Object getPostDaModificare() {
			return session.getAttribute(SessionData.POST_MOD);
		}
		public void setPostDaEliminare(Post post) {
			session.setAttribute(SessionData.POST_DEL, post);
		}
		public Object getPostDaEliminare() {
			return session.getAttribute(SessionData.POST_DEL);
		}


}
